/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.vse.adventura.po1715.xkosd00_kostka.hra;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IGameG;
import cz.pecinovsky.english.pojj.adv_framework.game_gui.IUIG;

import cz.pecinovsky.english.pojj.adv_framework.game_txt.IGame;

import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_101;
import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_115;
import cz.vse.adventura.po1715.xkosd00_kostka.gui._04_abstract.GUI_04;

import javax.swing.JOptionPane;



/*******************************************************************************
 * Třída {@code TestZadanéHry_101} je hlavní třídou projektu,
 * sloužící k zadání testované hry přímo do zdrojového kódu
 * a k jejímu následnému otestování.
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
public class TestZadaneHry_115
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

    /***************************************************************************
     * Otestuje zadanou hru základním, chybovým a kontrolním scénářem
     * (kontrolní scénář si test_101 vygeneruje sám).
     *
     * @param hra Testovaná hra
     */
    public static void test_101(IGame hra)
    {
        _Test_101 test = _Test_101.getInstance(hra);
        test.testGame();
    }


    /***************************************************************************
     * Otestuje zadanou hru základním, chybovým a kontrolním scénářem
     * (kontrolní scénář si test_101 vygeneruje sám).
     *
     * @param třídaHry Testovaná třídy hry
     * @return Pokud test projde bez chyb, vrátí {@code true},
     *         jinak vrátí {@code false}
     */
    public static boolean test_115(Class<? extends IGameG> třídaHry)
    {
        _Test_115 test = _Test_115.getInstance(třídaHry);
        boolean verified = test.verifyGame();
        return verified;
    }


    /***************************************************************************
     * Otestuje zadanou hru základním, chybovým a kontrolním scénářem
     * (kontrolní scénář si test_101 vygeneruje sám).
     *
     * @param třídaHry Testovaná třídy hry
     */
    public static void test_115_G(Class<? extends IGameG> třídaHry)
    {
        boolean verified = test_115(třídaHry);
        if (verified) {
            _Test_115 test = _Test_115.getInstance(třídaHry);
            test.playGameByTestScenario();
        }
    }



//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public TestZadaneHry_115()
    {
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================

    /***************************************************************************
     * @param args Parametry příkazového řádku
     */
    public static void main(String[] args)
    {
//        Class<? extends IGameG> třídaHry =
//        IGameG hra =
//
//        cz.vse.adventura.po0800.
//                xpecr999_pecinovsky.hra.Hra_BytLednička
//
//        cz.vse.adventura.po1715.
//                cerj117_cermak      .MojeHra
//                xkosd00_kostka      .Hra
//
//        cz.vse.adventura.ut0730.
//                xkasv12_kaspar      .HraNádraží
//                xkikm00_kikerle     .HraGD
//                xkrij44_kricka      .Hra
//                xmatm70_matus.
//                xrahv00_rahm        .Hra_VesmírnáLoď
//                xsedm52_sedlak.
//                xvola00_volcikova   .MojeHra
//                xvots00_votava.
//                xwinj00_winter      .Hra
//
//        cz.vse.adventura.ut0915.
//                xcelm06_celko       .Hra
//                xcibl00_cibulka     .Hra
//                xchrm18_chrastina   .Hra
//                xkacp09_kacina      .Adventura
//                xkriv13_krivak      .Game
//                xmalf00_maly.
//                xmihp00_Mihal       .adventura.Hra
//                xmolj00_molnar      .Kancl
//                xnikm00_nikl        .Hra
//                xpleo00_plevka      .HraÚnosLetadla
//                xprad08_pralovski   .HraDospievanie
//                xprom80_prochazka   .HraÚřad
//                xsleo00_slezak.
//                xurbj30_urban       .Hra
//                xvoso00_vosecky.
//                xzulv00_zulak.
//
//        cz.vse.adventura.ut1100.
//                xantk00_antonin         .HraDum
//                xcipd02_cipra           .HraApokalypsa
//                xduda03_dudek           .HraZemeplocha
//                xhejt11_hejl            .Hra
//                xherm06_herman          .Hra
//                xhraj32_hrachovec       .Hra
//                xkite00_kitkin          .Hra
//                xkodd00_kodydkova       .HraDort
//                xkorf07_korecky         .CestaNaParty
//                xkrit12_krizek          .Hra_Drevorubec
//                xlysv00_lysy            .Hra_Artur
//                xmikv16_mikula          .Hra
//                xracj00_racansky        .HraDne
//                xseca00_seckar          .ELRH_Game
//                xsevr06_sevcik.
//                xsomt01_sommer          .HraZkouška
//                xsukm09_suk             .HraAlfaRomeoX
//
//        cz.vse.adventura.ut1245.
//                xfouo00_fous            .Hra
//                xhall00_halda           .HraUdělejÚkol
//                xhenk00_hencelova       .Hra
//                xhurp00_hurtak          .Hra
//                xchvc00_chvojka         .Hra
//                xoliz00_olivova         .Hra
//                xpodj23_podavka         .Hra
//                xputt00_puta            .Hra
//                xraij00_rais            .Hra
//                xrydv00_rydl            .Hra
//                xskoj23_skoda           .Hra
//                xsyra04_syrovatka       .Hra
//                xtomz08_tomandl         .Hra
////
//                .class;
//            .getHra();
//            .getInstance();



//        IGameG tstGame = defGame;
//##############################################################################
//                cz.vse.adventura.ut0730.
//                    xvola00_volcikova.hra.Hra.getHra();

//                cz.vse.adventura.ut0915.
//                    xhavj56_havlicek.hra.Game.getGame();
//                    xhybj00_hyblbauer.hra.Game.getGame();
//                    xkasv12_kaspar.hra.HraNádraží.getGame();
//                    xvots00_votava.hra.Game.getGame();

//                cz.vse.adventura.ut1100.
//                    xgust00_gustab.hra.Hra_Byt.getHra();
//                    xkolj58_kolar.hra.Hra.getHra();
//                    xnovj137_novotny.hra.Hra.getHra();
//                    xpodj23_podavka.hra.Hra.getHra();
//                    xchvc00_chvojka.hra.Hra.getHra();

//                cz.vse.adventura.ut1245.
//                    xrahv00_rahm.hra.Hra_VesmírnáLoď.getHra();
//                    xsyra04_syrovatka.hra.Hra.getHra();
//                    xwinj00_winter.hra.Hra.getHra();


//        IUIG tstGUI = /*new//*/ defGUI;
//##############################################################################
//                cz.vse.adventura.ut0730.
//                    xvola00_volcikova.gui.GUI_04();

//                cz.vse.adventura.ut0915.
//                    xhavj56_havlicek.gui.GUI_04();
//                    xhybj00_hyblbauer.gui.GUI_05();
//                    xkasv12_kaspar.gui.GUI_04();
//                    xvots00_votava.gui.GUI_Final();
//
//                cz.vse.adventura.ut1100.
//                    xgust00_gustab.gui.GUI_04();
//                    xkolj58_kolar.gui.GUI_04();
//                    xnovj137_novotny.gui.GUI_04();
//                    xpodj23_podavka.gui.GUI_03();
//                    xchvc00_chvojka.gui.GUI_04();

//                cz.vse.adventura.ut1245.
//                    xrahv00_rahm.gui.GUI_Final();
//                    xsyra04_syrovatka.gui.GUI();
//                    xwinj00_winter.gui.GUI_04();

        IGameG defGame =
                cz.pecinovsky.english.pojj.adv_framework.test_util.default_game
                    .hra.DefaultGame.getInstance();

        IUIG defGUI = new
                cz.pecinovsky.english.pojj.adv_framework.test_util.default_gui
                    .DefaultGUI();

        IGameG tstGame = //defGame;
//##############################################################################
//                cz.vse.adventura.ut0730.
                Hra.getHra();
//                    xkrit12_krizek.hra.Hra_Drevorubec.getHra();
//                    xlysv00_lysy.hra.Hra_Artur.getHra();
//                    xmatl36_matousek.hra.Hra_Dobrodruh.getHra();

//                cz.vse.adventura.ut0915.
//                    xdedv00_dedek.hra.Hra.getHra();
//                    xnikm00_nikl.hra.Hra.getHra();
//                    xpleo00_plevka.hra.HraÚnosLetadla.getGame();
//                    xracj00_racansky.hra.HraDne.getHra();
////                    xsomt01_sommer.hra.HraZkouška.getHra();
//                    xvoso00_vosecky.hra.Game.getHra();

//                cz.vse.adventura.ut1100.
//                    xhall00_halda.hra.HraUdělejÚkol.getHra();
//                    xhejt11_hejl.hra.Hra.getHra();
//                    xskoj23_skoda.hra.Hra.getHra();

//                cz.vse.adventura.ut1245.
//                    xcibl00_cibulka.hra.Hra.getHra();
//                    xhenk00_hencelova.hra.Hra.getHra();
//                    xkikm00_kikerle.hra.HraGD.getHra();
//                    xmatm70_matus.hra.Hra.getHra();
//                    xzhya00_zhyhunouskaya.hra.Hra.getHra();


        IUIG tstGUI = new//*/ defGUI;
//##############################################################################
                GUI_04();
//                cz.vse.adventura.ut0730.
//                    xkrit12_krizek.gui.GUI_04();
//                    xlysv00_lysy.gui.GUI_04();
//                    xmatl36_matousek.gui.GUI_04();

//                cz.vse.adventura.ut0915.
//                    xdedv00_dedek.gui.GUI_03();
//                    xnikm00_nikl.gui.GUI();
//                    xpleo00_plevka.gui.GUI_04();
//                    xracj00_racansky.gui.GUI_04();
//                    xsomt01_sommer.gui._05_pictures.GUI_05();
//                    xvoso00_vosecky.gui.GUI_04();

//                cz.vse.adventura.ut1100.
//                    xhall00_halda.gui.DefaultGUI();
//                    xhejt11_hejl.gui.GUI_04();
//                    xskoj23_skoda.gui.GUI();

//                cz.vse.adventura.ut1245.
//                    xcibl00_cibulka.gui.GUI_04();
//                    xhenk00_hencelova.gui.GUI_04();
//                    xkikm00_kikerle.gui.GUI_04();
//                    xmatm70_matus.gui.GUI_04();
//                    xzhya00_zhyhunouskaya.gui.GUI_04();


        int res = JOptionPane.showOptionDialog(
                null,                               //Parent
                "Testovaná třída:\n\n" +
                tstGame.getClass().getName() + "\n\n" +
                "Zadejte požadovanou kombinaci",    //Message
                "Kombinace tříd",                   //Title
                0,                                  //optionType
                JOptionPane.QUESTION_MESSAGE,       //messageType,
                null,                               //icon,
                new String[] {                      //options,
                    "Verification",
                    "T-Hra + T-GUI",
                    "T-Hra + D-GUI",
                    "D-Hra + T-GUI",
                    "D-Hra + D-GUI",
                },
                "T-Hra + T-GUI"                     //init
                );

        _Test_115 test = null;
        switch (res) {
            case 0: _Test_115.getInstance(tstGame).verifyGame();
                    System.exit(0); break;
            case 1: test = _Test_115.getInstance(tstGame, tstGUI);
                    break;
            case 2: test = _Test_115.getInstance(tstGame, defGUI);
                    break;
            case 3: test = _Test_115.getInstance(defGame, tstGUI);
                    break;
            case 4: test = _Test_115.getInstance(defGame, defGUI);
                    break;
            default:
                    System.exit(0);
        }
        test.playGameByTestScenario();
    }



}
